﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;
using System.IO;
using System.Collections;


namespace eCampus
{
    /// <summary>
    /// Constructor asignar turnos
    /// </summary>
    public partial class FormAsignarTurnos : Form
    {
        /// <summary>
        /// variables
        /// </summary>
        ENUsuario ProfesorAux = new ENUsuario(); //creo un AlumnoAux apartir del ENUsuario
        
        ENAsignatura asignatura = new ENAsignatura();
        ENTurno turnoAux = new ENTurno(); //creo un turno apartir del ENTurno
        ArrayList ListaAsignaturasglobal = null;
        ArrayList listaTurnos = null;
        ArrayList turnosHorario = null, turnosHorariosEnCbHorarios=null;
      
        string[] dias = new string[] { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes" };

        /// <summary>
        /// Guardará el directorio
        /// </summary>
        string miDirectorio = @"c:\ecampusTemp\";

        /// <summary>
        /// se carga cuando se carga el formulario
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormAsignarTurnos_Load(object sender, EventArgs e)
        {
            cbAsignatura.SelectedIndex = -1;// combobox de asignaturas esta vacio inicialmente
        }

        /// <summary>
        /// Constructor parametrizado
        /// </summary>
        /// <param name="prof">profeosr</param>
        public FormAsignarTurnos(ENUsuario prof)
        {
            InitializeComponent();
            //Rellena la lista de asignaturas en el combobox
            ArrayList ListaAsignaturas = asignatura.ConsultaAsignaturas();
            ArrayList ListaAsignaturaAux = new ArrayList();
            ListaAsignaturasglobal = ListaAsignaturas;
            foreach (ENAsignatura asig in ListaAsignaturas)
            {
                ListaAsignaturaAux.Add(asig.Nombre);
            }
            cbAsignatura.DataSource = ListaAsignaturaAux;
            
            //Rellena el Nombre Apellido1 y Apellido2 del usuario en el Textbox
            ProfesorAux = prof;
            tbNombreApell.Text = prof.Nombre + " " + prof.Apellido1 + " " + prof.Apellido2;
            //Rellena el año en el textbox
            tbAnyo.Text = System.DateTime.Today.Year.ToString();

            #region Cargar Imagen
            ///traigo imagen: editable
            if (prof.Imagen != "")
            {
                lbPathImagen.Text = prof.Imagen;

                //Me preparo el directorio

                try
                {
                    //Si esta lo borro y lo vuelvo a crear
                    if (Directory.Exists(miDirectorio) == true)
                    {
                        Directory.Delete(miDirectorio, true);
                        Directory.CreateDirectory(miDirectorio);
                    }
                    else
                    {
                        Directory.CreateDirectory(miDirectorio);
                    }

                    ///Bajo imagen desde Dropbox
                    prof.DescargarImagen(prof.Correo, miDirectorio);

                    ///extracto nombre de la imagen 
                    string[] words = lbPathImagen.Text.Split('/');
                    foreach (string word in words)
                    {
                        cbFicheroDropbox.Items.Add(word);
                    }
                    int numero = cbFicheroDropbox.Items.Count;

                    ///la coloco en el picturebox adecuado
                    string rutaFichero = miDirectorio + (cbFicheroDropbox.Items[numero - 1]).ToString();

                    ///la cargo en el pictureBox
                    FileStream ms;
                    ms = new FileStream(rutaFichero, FileMode.Open, FileAccess.Read);
                    pbImagen.Image = Image.FromStream(ms);
                    ms.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("No se han podido cargar los datos del Usuario ", "Problema");
                }
            }
            #endregion

            RellenarDatagrid(true);
        }

        private void cbAsignatura_SelectedIndexChanged(object sender, EventArgs e)
        {
            asignatura = ((ENAsignatura)ListaAsignaturasglobal[cbAsignatura.SelectedIndex]);
            listaTurnos = turnoAux.ConsultarTurno(asignatura.Codigo);
            ArrayList listaTipos1 = new ArrayList();
            foreach(ENTurno t in listaTurnos)
            {
                if(listaTipos1.Count==0)
                    listaTipos1.Add(t.Tipo);
                else if (listaTipos1[0].Equals(t.Tipo))
                {

                }
                else
                {
                    listaTipos1.Add(t.Tipo);
                    break;
                }
            }
            cbTipo.DataSource = listaTipos1;

        }

        private void cbTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Yo me crería dos arrays, con los días de prácticas y los de teoría
            // directamente, y añades al combobox el que corresponda, pero ya tienes los
            // dos descargados

            // dias es un array que está declarado arriba con los días de la semana
            // aqui tienes que añadir a 
            //  arrayDeTeoria.Add(dias[indiceDeLaBaseDeDatosParaTeoria]) 
            // arrayDePractica.Add(dias[indiceDeLaBaseDeDatosParaPractica])tantas veces como 
            //días haya

            // si es el turno de practica       cbDia.DataSource = arrayDePractica
            // si de teoría                     cbDia.DataSource = arrayDeTeoria

            ArrayList listaTeoria = new ArrayList();
            ArrayList listaPractica = new ArrayList();
            foreach (ENTurno t in listaTurnos)
            {
                if (t.Tipo.Equals('T'))
                {
                    if (listaTeoria.Count == 0)
                    {
                        listaTeoria.Add(dias[t.Dia]);
                    }
                    else if (listaTeoria.Contains(dias[t.Dia]))
                    {

                    }
                    else
                    {
                        listaTeoria.Add(dias[t.Dia]);
                       
                    }
                }
                else
                {
                    if (listaPractica.Count == 0)
                    {
                        listaPractica.Add(dias[t.Dia]);
                    }
                    else if (listaPractica.Contains(dias[t.Dia]))
                    {

                    }
                    else
                    {
                        listaPractica.Add(dias[t.Dia]);
                        
                    }
                }   
            }
            if (cbTipo.SelectedItem.Equals('T'))
                cbDia.DataSource = listaTeoria;
            else
                cbDia.DataSource = listaPractica;
        }


        private void cbDia_SelectedIndexChanged(object sender, EventArgs e)
        {
             ArrayList turnosHorario = new ArrayList();
             
                 foreach (ENTurno t in listaTurnos)
                 {

                     if (cbTipo.SelectedItem.Equals(t.Tipo) && cbDia.SelectedItem.Equals(dias[t.Dia]))
                     {
                         turnosHorario.Add(t);
                     }
                 }
                 turnosHorariosEnCbHorarios = new ArrayList();
                 foreach (ENTurno t in turnosHorario)
                 {
                     String n = t.H_ini.Hour.ToString() + " - " + t.H_fin.Hour.ToString();
                     //cbHorario.Items.Add(n);
                     turnosHorariosEnCbHorarios.Add(n);
                 }
                 cbHorario.DataSource = turnosHorariosEnCbHorarios;
        }

        private void cbHorario_SelectedIndexChanged(object sender, EventArgs e)
        {

            //turnoAux = (ENTurno)turnosHorariosEnCbHorarios[cbAsignatura.SelectedIndex];

        }

        private void btAsignarTurnos_Click(object sender, EventArgs e)
        {
            //Limpio los errores
            errorProviderDiaVacio.Clear();
            errorProviderTipoVacio.Clear();
            errorProviderHorarioVacio.Clear();
            errorProviderTurnoAsignado.Clear();
           
            //variable que comprueba si hay errores
            bool error = false;


            try
            {
                turnoAux = (ENTurno)turnosHorario[cbHorario.SelectedIndex];
                // Compruebo que se ha seleccionado un tipo
                if (cbTipo.Text == "")
                {
                    errorProviderTipoVacio.SetError(cbTipo, "Selecciona un tipo");
                    error = true;
                }
                else if (cbDia.Text == "")
                {
                    errorProviderDiaVacio.SetError(cbDia, "Selecciona un Dia");
                    error = true;
                }
                else if (cbHorario.Text == "")
                {
                    errorProviderHorarioVacio.SetError(cbHorario, "Seleciona un Horario");
                    error = true;
                }
                else
                {
                    if (turnoAux.EsYaAsignadoTurno(ProfesorAux.Correo, turnoAux.Dia, turnoAux.H_ini, turnoAux.H_fin) == true)
                    {
                        errorProviderTurnoAsignado.SetError(cbAsignatura, "El profesor ya tiene un turno a esa misma hora hoy");
                        error = true;
                    }
                }

                if (error == false)
                {
                    turnoAux.AltaTurno(turnoAux);
                    MessageBox.Show("Se le ha asignado el turno correctamente", "Correcto", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //recargo datagridview
                    RellenarDatagrid();
                    //limpio los campo asignatura
                    LimpiarCampo();
                    //limpio los posibles errores
                    errorProviderTipoVacio.Clear();
                    errorProviderDiaVacio.Clear();
                    errorProviderHorarioVacio.Clear();
                    errorProviderTurnoAsignado.Clear();
                }
            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            catch (FormatException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
        private void LimpiarCampo() //Pone el campo Asignatura vacio
        {
            cbAsignatura.SelectedIndex = -1;
            cbTipo.SelectedIndex = -1;
            cbDia.SelectedIndex = -1;
            cbHorario.SelectedIndex = -1;
        }
        private void RellenarDatagrid(bool primera = false)
        {
            dgAsigProfesor.DataSource = turnoAux.ConsultaTurnosProfesor(ProfesorAux.Correo);

            if (primera)
            {
                //Añade columna borrar

                DataGridViewImageColumn ColEliminar = new DataGridViewImageColumn();
                ColEliminar.Name = "elim";
                ColEliminar.HeaderText = "";
                ColEliminar.Image = eCampus.Properties.Resources.btBorrar;
                ColEliminar.Width = 30;
                dgAsigProfesor.Columns.Add(ColEliminar);


                //Digo qué columnas van a estar visibles
                dgAsigProfesor.Columns["turCodigo"].Visible = true;
                dgAsigProfesor.Columns["asiNombre"].Visible = true;
                dgAsigProfesor.Columns["turTipo"].Visible = true;
                dgAsigProfesor.Columns["turDia"].Visible = true;
                dgAsigProfesor.Columns["turH_ini"].Visible = true;
                dgAsigProfesor.Columns["turH_fin"].Visible = true;
                dgAsigProfesor.Columns["turAula"].Visible = true;
               
                //TAMAÑO DE LAS COLUMNAS
                dgAsigProfesor.Columns["turCodigo"].Width = 45;
                dgAsigProfesor.Columns["asiNombre"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgAsigProfesor.Columns["turTipo"].Width = 35;
                dgAsigProfesor.Columns["turDia"].Width = 35;
                dgAsigProfesor.Columns["turH_ini"].Width = 100;
                dgAsigProfesor.Columns["turH_fin"].Width = 100;
                dgAsigProfesor.Columns["turAula"].Width = 45;

                //ORDEN DE LAS COLUMNAS
                dgAsigProfesor.Columns["turCodigo"].DisplayIndex = 0;
                dgAsigProfesor.Columns["asiNombre"].DisplayIndex = 1;
                dgAsigProfesor.Columns["turTipo"].DisplayIndex = 2;
                dgAsigProfesor.Columns["turDia"].DisplayIndex = 3;
                dgAsigProfesor.Columns["turH_ini"].DisplayIndex = 4;
                dgAsigProfesor.Columns["turH_fin"].DisplayIndex = 5;
                dgAsigProfesor.Columns["turAula"].DisplayIndex = 6;
                dgAsigProfesor.Columns["elim"].DisplayIndex = 7;
             
                //TEXTO DE LA CABECERQA DE LAS COLUMNAS
                dgAsigProfesor.Columns["turCodigo"].HeaderText = "Código";
                dgAsigProfesor.Columns["asiNombre"].HeaderText = "Nombre";
                dgAsigProfesor.Columns["turTipo"].HeaderText = "Tipo";
                dgAsigProfesor.Columns["turDia"].HeaderText = "Dia";
                dgAsigProfesor.Columns["turH_ini"].HeaderText = "Hora Inicio";
                dgAsigProfesor.Columns["turH_fin"].HeaderText = "Hora Fin";
                dgAsigProfesor.Columns["turAula"].HeaderText = "Aula";

            }
        }

        private void FormAsignarTurnos_Load_1(object sender, EventArgs e)
        {

        }
        

        
        
         
    }

}

   

